/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package threads;

import java.util.*;

/**
 *
 * @author Mikael
 */
public class XSimpleQueue {
private List<Object> l = new Vector<Object>();
private ArrayList<Integer> p = new ArrayList<Integer>();

    public int size(){
        return l.size();
    }

    public synchronized void put(Object obj){ // synkroniserad metod för att lägga till ny data i vår kö; Den skall även placera nya tillägg efter hur hög dess tråd-prioritet är
        if(l.isEmpty() == false){
            boolean higher = false;
            for(int i=0; i < l.size(); i++){
                if(Thread.currentThread().getPriority() > p.get(i) ){
                    higher = true;
                    l.add(i, obj);
                    p.add(i, Thread.currentThread().getPriority());
                }

                if(higher == false){
                    l.add(obj);
                    p.add((Integer) Thread.currentThread().getPriority());
                }

            }
        }
        else{
            l.add(obj);
            p.add(Thread.currentThread().getPriority());
        }
        notify();
    }

    public synchronized Object take(){ // synkroniserad metod för att ta bort data ur vår kö
        while(l.isEmpty()){
            try{
                wait();
            }
            catch(InterruptedException e){
                return null;
            }
        }
        Object obj = l.get(0);
        l.remove(0);
        return obj;
    }
}
